package com.gimi.cloud.bbp.manage.service.page.impl;

import java.util.List;

import javax.transaction.Transactional;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.gimi.cloud.bbp.common.utils.MyBeanUtils;
import com.gimi.cloud.bbp.dao.dao.page.PageModelDao;
import com.gimi.cloud.bbp.dto.page.PageModelDTO;
import com.gimi.cloud.bbp.entity.page.PageModel;
import com.gimi.cloud.bbp.entity.page.PageModelPhoto;
import com.gimi.cloud.bbp.manage.service.page.PageModelPhotoService;
import com.gimi.cloud.bbp.manage.service.page.PageModelService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;

import tk.mybatis.mapper.entity.Example;
import tk.mybatis.mapper.entity.Example.Criteria;

@Service
public class PageModelServiceImpl implements PageModelService{
	
	@Autowired private PageModelDao dao;
	@Autowired private PageModelPhotoService pageModelPhotoService;
	
	@Override
	@Transactional
	public PageModel saveInfo(PageModelDTO dto) { 
		PageModelPhoto pageModelPhoto = null;
		//如果有图片先保存图片
		if (dto.getPageModelPhoto() != null) {
			pageModelPhoto = pageModelPhotoService.saveInfo(dto.getPageModelPhoto());
		}
		if (pageModelPhoto != null) {
			dto.setPhotoId(pageModelPhoto.getId());
		}
		PageModel entity = null;
		if (dto.getId() != null) {
			entity = dao.queryBy("id", dto.getId());
		}
		if (entity != null) {
			MyBeanUtils.copyPropertiesIgnoreNullAndEmptyStr(dto, entity);
			dao.baseUpdateByPrimaryKey(entity);
		} else {
			entity = new PageModel();
			MyBeanUtils.copyPropertiesIgnoreNullAndEmptyStr(dto, entity);
			dao.baseInsert(entity);
		}
		return entity;
		
	}
	
	@Override
	public PageInfo<PageModel> getList(PageModelDTO dto){
		Example example = new Example(PageModel.class);
		example.setOrderByClause("id desc");
		Criteria criteria = example.createCriteria();
		criteria.andEqualTo("isDelete", "0");
		if (dto.getTitle() != null) {
			criteria.andLike("title", "%"+ dto.getTitle() + "%");
		}
		PageHelper.startPage(dto.getPage(), dto.getColumn());
		List<PageModel> entitys =  dao.selectByExample(example);
		return new PageInfo<>(entitys);
	}
	
	@Override
	@Transactional
	public Long delInfo(Integer... ids){
		if (ids == null || ids.length < 1) {
			return 0L;
		}
		pageModelPhotoService.delByModelId(StringUtils.join(ids, ","));
		return dao.delById(StringUtils.join(ids, ","));
	}
	
	@Override
	@Transactional
	public Long delInfoByColumnId(Integer... columnIds){
		if (columnIds == null || columnIds.length < 1) {
			return 0L;
		}
		List<Integer> ids = dao.getListByColumnIds(StringUtils.join(columnIds, ","));
		return this.delInfo(ids.toArray(new Integer[] {}));
	}
	
	@Override
	public PageModelDTO getInfoById(Integer id) {
		return dao.getPageModelById(id);
	}
}
